package logica;

import com.herotactics.fuentedatos.FuenteDatos;
import java.util.Collection;

/**
 * Clase abstracta que deben heredar los distintos modos de juegos
 * (ejercito vs ejercito, tres en raya, ajedrez...)
 *
 * @author Hasier Rodriguez
 */
public abstract class ModeloEjecucion implements Ejecutable {

    private Partida partida = null;
    private static final String pathAProyecto;
    private FuenteDatos fuenteDatos;
    private Collection<FuenteDatos> fuentesDatos;
    
    static {
        if (System.getProperty("java.vendor").equals("The Android Project")) {
            pathAProyecto = "/sdcard/herotactics";
        } else {
            pathAProyecto = System.getProperty("user.dir");
        }
    }

    /**
     * Crea un nuevo ModeloEjecucion vacío
     */
    public ModeloEjecucion() {
    }
    
    /**
     * Devuelve las fuente de datos disponibles en este ModeloEjecucion
     * 
     * @return 
     */
    public Collection<FuenteDatos> getFuentesDatos() {
        return fuentesDatos;
    }
    
    /**
     * Establece una nueva coleccion de fuentes de datos
     * 
     * @param fds La fuente da datos
     */
    public void setFuentesDatos(Collection<FuenteDatos> fds) {
        fuentesDatos = fds;
    }

    /**
     * Devuelve la fuente de datos de este ModeloEjecucion
     * 
     * @return 
     */
    public FuenteDatos getFuenteDatos() {
        return fuenteDatos;
    }
    
    /**
     * Establece una nueva fuente de datos
     * 
     * @param fd 
     */
    public void setFuenteDatos(FuenteDatos fd) {
        fuenteDatos = fd;
    }

    /**
     * Devuelve el String que apunta a la raíz de directorios del Proyecto
     * 
     * @return La carpeta principal donde se encuentra el proyecto con la Logica general
     */
    public static String getPathAProyecto() {
        return pathAProyecto;
    }

    /**
     * Establece la partida para este modelo
     * 
     * @param p La partida
     */
    public void setPartida(Partida p) {
        partida = p;
    }

    /**
     * Reinicia el turno
     */
    public void cambiaTurno() {
        partida.getTurno().resetTurno();
    }

    /**
     * Devuelve la partida de este modelo
     * 
     * @return 
     */
    public Partida getPartida() {
        return partida;
    }
}
